package com.gxa.mapper;

import com.gxa.common.vo.UserRequestVo;
import com.gxa.common.vo.UserVo;
import com.gxa.entity.SysUser;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author MacieSerenity
 */
public interface SysUserMapper {
    /**
     * 根据用户名获取用户信息
     * @param username 用户名
     * @return 用户信息
     */
    SysUser getUserByUsername(@Param("username") String username);

    /**
     * 根据id查询某个User
     *
     * @param id 用户的id
     * @return 查询出来的用户
     */
    SysUser getUserById(@Param("id") Integer id);

    /**
     * 根据ID查询某个有效的ID
     *
     * @param id 用户ID
     * @return 返回SysUser
     */
    SysUser getActiveUserById(@Param("id") Integer id);

    /**
     * 前端需要，需要根据存储的用户认证信息反查询用户的ID
     *
     * @param username 用户名
     * @return 用户的ID
     */
    Integer getUserIdByUsername(@Param("username") String username);

    /**
     * 根据部门ID 查询用户信息
     * @param departmentId 部门ID
     * @return 用户列表集合
     */
    List<SysUser> findUserByDepId(@Param("departmentId") Integer departmentId);


    /**
     * 根据部门ID删除用户
     * @param depId 部门ID
     * @return 影响行数
     */
    Integer delUserByDeptId(@Param("depId") Integer depId);

    /**
     * 根据用户ID删除用户
     * @param id 用户id
     * @return 影响行数
     */
    Integer delUserById(@Param("id") Integer id);

    /**
     * 查询所有用户列表
     * @return
     */
    List<UserVo> selectAllUser();

    /**
     * 根据用户真实姓名查询用户
     * @param condition 真实姓名
     * @return
     */
    List<UserVo> selectUserByName(@Param("condition") String condition);

    /**
     * 根据条件查询用户信息
     * @param userRequestVo 用户查询请求的实体
     * @return
     */
    List<UserVo> selectUserByCondition(UserRequestVo userRequestVo);

    /**
     * 添加一条用户信息
     * @param userVo 用户实体
     * @return
     */
    Integer addUser(UserVo userVo);

    /**
     * 根据用户id回显用户信息
     * @param id 用户id
     * @return
     */
    UserVo selectUserById(@Param("id") Integer id);

    /**
     * 修改用户信息
     * @param userVo 用户实体
     * @return
     */
    Integer updateUserById(UserVo userVo);

    /**
     * 重置密码
     * @param password
     * @param id
     * @return
     */
    Integer updatePwd(@Param("password") String password,@Param("id") Integer id);

    Integer updateUserImg(@Param("img") String img,@Param("id") Integer id);
}
